package zhongbo.java.air.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import zhongbo.java.air.model.AirFlightPath;

import java.util.Date;
import java.util.List;

@Mapper
public interface AirFlightPathMapper extends BaseMapper<AirFlightPath> {
    /**
     * 查询指定行数据
     *
     * @param offset 偏移量
     * @param pageSize         大小
     * @return 对象列表
     */
    @Select("SELECT * FROM air_flight_path ORDER BY id LIMIT #{pageSize} OFFSET #{offset}")
    List<AirFlightPath> queryAllByLimit(@Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    /**
     * 通过实体作为筛选条件查询
     *
     * air_flight_path 实例对象
     * @return 对象列表
     */
    @Select("SELECT * FROM air_flight_path WHERE icao_code = #{icaoCode}")
    AirFlightPath selectByIcaoCode(@Param("icaoCode") String icaoCode);

    @Select("SELECT * FROM air_flight_path WHERE icao_code = #{icaoCode} AND timestamp BETWEEN #{startTime} AND #{endTime} LIMIT #{offset}, #{pageSize}")
    List<AirFlightPath> queryByIcaoAndTimestamp(@Param("icaoCode") String icaoCode, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    @Select("SELECT COUNT(*) FROM air_flight_path WHERE icao_code = #{icaoCode} AND timestamp BETWEEN #{startTime} AND #{endTime}")
    long countByIcaoAndTimestamp(@Param("icaoCode") String icaoCode, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

//    /**
//     * 分页查询
//     *
//     * @param page 页码
//     * @param pageSize 分页大小
//     * @param icao icao_code
//     * @param startTime 开始时间
//     * @param endTime 结束时间
//     * @param keyword 关键字
//     * @param fields 字段
//     * @param orderByField 排序字段
//     * @param orderByAsc 是否升序
//     * @return 对象列表
//     */
//    @Select("<script>" +
//            "SELECT * FROM air_flight_path " +
//            "<where>" +
//            "<if test='icao != null and icao != \"\"'>AND icao_code = #{icao}</if>" +
//            "<if test='startTime != null and startTime != \"\"'>AND timestamp &gt;= #{startTime}</if>" +
//            "<if test='endTime != null and endTime != \"\"'>AND timestamp &lt;= #{endTime}</if>" +
//            "<if test='keyword != null and keyword != \"\"'>AND (icao_code LIKE CONCAT('%', #{keyword}, '%') OR timestamp LIKE CONCAT('%', #{keyword}, '%'))</if>" +
//            "</where>" +
//            "<if test='orderByField != null and orderByField != \"\"'>ORDER BY ${orderByField} ${orderByAsc ? 'ASC' : 'DESC'}</if>" +
//            "LIMIT #{pageSize} OFFSET #{offset}" +
//            "</script>")
//    List<AirFlightPath> findPage(@Param("page") Integer page, @Param("pageSize") Integer pageSize, @Param("icao") String icao, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("keyword") String keyword, @Param("fields") String fields, @Param("orderByField") String orderByField, @Param("orderByAsc") Boolean orderByAsc);

//    /**
//     * 查询指定行数据
//     *
//     * @param offset 偏移量
//     * @param pageSize         大小
//     * @return 对象列表
//     */
//    @Select("SELECT * FROM air_aircraft ORDER BY id LIMIT #{pageSize} OFFSET #{offset}")
//    List<AirFlightPath> queryAllByLimit(@Param("offset") int offset, @Param("pageSize") int pageSize);
//    /**
//     * 根据条件统计记录数
//     *
//     * @param icao icao_code
//     * @param startTime 开始时间
//     * @param endTime 结束时间
//     * @param keyword 关键字
//     * @return 记录数
//     */
//    @Select("<script>" +
//            "SELECT COUNT(*) FROM air_flight_path " +
//            "<where>" +
//            "<if test='icao != null and icao != \"\"'>AND icao_code = #{icao}</if>" +
//            "<if test='startTime != null and startTime != \"\"'>AND timestamp &gt;= #{startTime}</if>" +
//            "<if test='endTime != null and endTime != \"\"'>AND timestamp &lt;= #{endTime}</if>" +
//            "<if test='keyword != null and keyword != \"\"'>AND (icao_code LIKE CONCAT('%', #{keyword}, '%') OR timestamp LIKE CONCAT('%', #{keyword}, '%'))</if>" +
//            "</where>" +
//            "</script>")
//    long countByCondition(@Param("icao") String icao, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("keyword") String keyword);
}